package com.flying.flyingchessgame.service;

import com.flying.flyingchessgame.entity.User;

/**
 * 用户服务接口
 * <p>
 * 该接口定义了与用户相关的业务逻辑操作，包括用户注册、登录、信息查询等功能。
 * 实现类需要处理具体的业务逻辑，如密码加密、用户信息验证等。
 * </p>
 * 
 * @author flying-chess
 * @version 1.0
 */
public interface UserService {
    
    /**
     * 保存新用户
     * <p>
     * 创建并保存一个新用户，包括用户名、密码和可选的邮箱。
     * 密码会在保存前进行加密处理。
     * </p>
     *
     * @param username 用户名
     * @param password 明文密码
     * @param email 邮箱（可选）
     * @return 保存后的用户对象
     */
    User saveUser(String username, String password, String email);
    
    /**
     * 检查用户名是否已存在
     *
     * @param username 待检查的用户名
     * @return 如果用户名已存在返回true，否则返回false
     */
    boolean checkUsernameExists(String username);
    
    /**
     * 检查邮箱是否已存在
     *
     * @param email 待检查的邮箱
     * @return 如果邮箱已存在返回true，否则返回false
     */
    boolean checkEmailExists(String email);
    
    /**
     * 加密密码
     * <p>
     * 使用安全的加密算法对明文密码进行加密。
     * </p>
     *
     * @param password 明文密码
     * @return 加密后的密码
     */
    String encryptPassword(String password);
    
    /**
     * 根据ID获取用户
     *
     * @param id 用户ID
     * @return 用户对象，如果不存在则返回null
     */
    User getUserById(Long id);
    
    /**
     * 根据用户名获取用户
     *
     * @param username 用户名
     * @return 用户对象，如果不存在则返回null
     */
    User getUserByUsername(String username);
} 